<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>1. 两数之和</title>
</head>

<body>
  <div>
    <p>给定一个整数数组 nums和一个目标值target，
      请你在该数组中找出和为目标值的那&nbsp;两个整数，并返回他们的数组下标。</p>
    <p>你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。</p>
    <p>示例:</p>
    <pre>
      给定 nums = [2, 7, 11, 15], target = 9
      因为 nums[0] + nums[1] = 2 + 7 = 9
      所以返回 [0, 1]
      </pre>
  </div>
  <script>
    const nums = [2, 7, 11, 15]
    const target = 9

    // 第一种方法  利用遍历
    function twoSum1(nums, target) {
      for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
          if (nums[i] + nums[j] === target) {
            return [i, j]
          }
        }
      }
    }

    console.log(twoSum1(nums, target))

    // 第二种方式 利用map

    function twoSum2(nums, target) {
      let numsMap = new Map()
      for (let i = 0; i < nums.length; i++) {
        if (numsMap.has(target - nums[i])) {
          return [numsMap.get(target - nums[i]), i]
        }
        numsMap.set(nums[i], i)
      }
    }

    console.log(twoSum2(nums, target))








  </script>
</body>

</html>